package com.cskaoyan.javase.oop1._14block._3static._2classload;
/**
 * 补充类加载的知识
 * 了解在类加载过程中,静态成员变量的赋值究竟如何进行,包括一些赋值,静态代码块的结构如何执行.
 *
 * 类加载总体要分成三大步:
 * 加载 --> 连接 --> 初始化
 * 其中
 * 连接分成三个小步骤: 验证,准备,解析
 *
 *
 * @since 16:21
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        System.out.println(A.aInstance);
    }
}
class A{
    /*
        在类加载A类的过程中
        为什么可以直接创建A的对象呢?
        这里涉及Java类加载的核心机制

        类加载其实是触发该类的类初始化
        当外界需要访问aInstance时
        就会触发A类完成初始化

        A类要想完成初始化
        首先需要进行加载 --> 连接

        而加载和连接已经进行完毕后
        开始进行本类的初始化

        在本来初始化的过程中,如果想要创建本类对象
        这时,就不会再次触发类的初始化

        也就意味着:

        1.类的 初始化只要开始,就不会再进行第二次了!
        2.一个类只要完成加载和连接就可以new对象了.创建一个类的对象不需要完全类加载结束.
     */
    static A aInstance = new A();
}
